//// 这个文件包含模板类的实现
//template<typename T>
//Matrix<T>::Matrix(size_t rows, size_t cols) : rows(rows), cols(cols) {
//    data.resize(rows, std::vector<T>(cols, 0));
//}
//
//template<typename T>
//Matrix<T>::Matrix(const Matrix& other) : rows(other.rows), cols(other.cols), data(other.data) {}
//
//template<typename T>
//Matrix<T> Matrix<T>::Identity(size_t size) {
//    Matrix result(size, size);
//    for (size_t i = 0; i < size; ++i) {
//        result(i, i) = 1;
//    }
//    return result;
//}
//
//template<typename T>
//Matrix<T> Matrix<T>::Zero(size_t rows, size_t cols) {
//    return Matrix(rows, cols);
//}
//
//template<typename T>
//T& Matrix<T>::operator()(size_t i, size_t j) {
//    return data[i][j];
//}
//
//template<typename T>
//const T& Matrix<T>::operator()(size_t i, size_t j) const {
//    return data[i][j];
//}
//
//template<typename T>
//Matrix<T> Matrix<T>::operator*(const Matrix& other) const {
//    if (cols != other.rows) {
//        throw std::runtime_error("Matrix dimensions mismatch for multiplication");
//    }
//
//    Matrix result(rows, other.cols);
//    for (size_t i = 0; i < rows; ++i) {
//        for (size_t j = 0; j < other.cols; ++j) {
//            T sum = 0;
//            for (size_t k = 0; k < cols; ++k) {
//                sum += data[i][k] * other.data[k][j];
//            }
//            result(i, j) = sum;
//        }
//    }
//    return result;
//}
//
//template<typename T>
//Matrix<T> Matrix<T>::operator+(const Matrix& other) const {
//    if (rows != other.rows || cols != other.cols) {
//        throw std::runtime_error("Matrix dimensions mismatch for addition");
//    }
//
//    Matrix result(rows, cols);
//    for (size_t i = 0; i < rows; ++i) {
//        for (size_t j = 0; j < cols; ++j) {
//            result(i, j) = data[i][j] + other.data[i][j];
//        }
//    }
//    return result;
//}
//
//template<typename T>
//Matrix<T> Matrix<T>::operator-(const Matrix& other) const {
//    if (rows != other.rows || cols != other.cols) {
//        throw std::runtime_error("Matrix dimensions mismatch for subtraction");
//    }
//
//    Matrix result(rows, cols);
//    for (size_t i = 0; i < rows; ++i) {
//        for (size_t j = 0; j < cols; ++j) {
//            result(i, j) = data[i][j] - other.data[i][j];
//        }
//    }
//    return result;
//}
//
//template<typename T>
//Matrix<T> Matrix<T>::transpose() const {
//    Matrix result(cols, rows);
//    for (size_t i = 0; i < rows; ++i) {
//        for (size_t j = 0; j < cols; ++j) {
//            result(j, i) = data[i][j];
//        }
//    }
//    return result;
//}
//
//template<typename T>
//Matrix<T> Matrix<T>::inverse() const {
//    if (rows != cols) {
//        throw std::runtime_error("Matrix must be square for inverse");
//    }
//
//    Matrix augmented(rows, cols * 2);
//    for (size_t i = 0; i < rows; ++i) {
//        for (size_t j = 0; j < cols; ++j) {
//            augmented(i, j) = data[i][j];
//        }
//        augmented(i, i + cols) = 1;
//    }
//
//    for (size_t i = 0; i < rows; ++i) {
//        T pivot = augmented(i, i);
//        if (std::abs(pivot) < 1e-10) {
//            throw std::runtime_error("Matrix is singular");
//        }
//
//        for (size_t j = 0; j < 2 * cols; ++j) {
//            augmented(i, j) /= pivot;
//        }
//
//        for (size_t k = 0; k < rows; ++k) {
//            if (k != i) {
//                T factor = augmented(k, i);
//                for (size_t j = 0; j < 2 * cols; ++j) {
//                    augmented(k, j) -= factor * augmented(i, j);
//                }
//            }
//        }
//    }
//
//    Matrix result(rows, cols);
//    for (size_t i = 0; i < rows; ++i) {
//        for (size_t j = 0; j < cols; ++j) {
//            result(i, j) = augmented(i, j + cols);
//        }
//    }
//    return result;
//}
//
//template<typename T>
//Matrix<T> Matrix<T>::operator*(T scalar) const {
//    Matrix result(rows, cols);
//    for (size_t i = 0; i < rows; ++i) {
//        for (size_t j = 0; j < cols; ++j) {
//            result(i, j) = data[i][j] * scalar;
//        }
//    }
//    return result;
//}